<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button onclick="test()">测试</button>
    <script>
      let a = 1;
      const b = 2;
      var c = 3; // var声明的变量在外部的话会挂给window
      //b = 4 //常量不允许赋值
      //   alert(window.c)
      test();
      //   变量提升 只有function声明的变量才会挂到全局，可以在function之前进行调用
      // 浏览器引擎会扫描所有的变量和声明函数，直接把他们挂到window上
      // const test = ()=>{} 这种赋值的不可以变量提升
      //   const test = ()=>{
      //     alert(c)
      //   }
      function test() {
        c = 4;
        alert(c);
        // 会先从局部找变量，如果找到就局部优先，如果没找到就找到上一级为准，全找不到就找全局window(浏览器的全局对象)
      }
    </script>
  </body>
</html>
